package main

import "fmt"

type Point struct {
	x int
	y int
}

//类型断言  类似于java中的instanceof
func main() {

	var a interface{}
	var point Point = Point{1, 2}
	a = point //ok
	//如何将a赋值给一个Point变量
	var b Point
	//b = a         // 不可以
	b = a.(Point) //可以  类型断言
	fmt.Println(b)

	//类型断言的其他案例
	var x interface{}
	var b2 float32 = 1.1
	x = b2 //空接口可以接受任意类型
	// x =>float32 [使用类型断言]
	y := x.(float32)
	fmt.Printf("y的类型是%T 值是=%v \n", y, y)

	//类型断言（带检测的）

	if z, ok := x.(float64); ok {
		fmt.Println("convert success")
		fmt.Printf("z的类型是%T 值是=%v \n", z, z)
	} else {
		fmt.Println("convert fail")
	}

	fmt.Println("继续执行")
}
